package main

import "fmt"

// trace函数用于打印进入某个函数的信息
func trace(s string) {
	fmt.Println("entering:", s)
}

// untrace函数用于打印离开某个函数的信息
func untrace(s string) {
	fmt.Println("leaving:", s)
}

// a函数演示了如何使用trace和untrace来追踪函数的进入和退出
func a() {
	trace("a")
	defer untrace("a")
	fmt.Println("in a")
}

// b函数展示了函数调用链中trace和untrace的使用，以及对函数a的调用
func b() {
	trace("b")
	defer untrace("b")
	fmt.Println("in b")
	a()
}

// main函数是程序的入口点，这里调用了b函数开始执行
func main() {
	b()
}
